﻿using System;
using System.Configuration;
using System.Web.Mvc;
using Infrastructure;
using OpenAuth.App.SSO;
using OpenAuth.App.OAuth2;

namespace OpenAuth.Mvc.Controllers
{
    public class LoginController : Controller
    {
        private string _appKey = ConfigurationManager.AppSettings["SSOAppKey"];

        // GET: Login
        public ActionResult Index()
        {
            ViewBag.AppKey = _appKey;
            OAuth2Base ob = OAuth2Factory.Current;//获取当前的授权类型，如果成功，则会缓存到Session中。
            if (ob != null) //说明用户点击了授权，并跳回登陆界面来
            {
                string account = string.Empty;
                if (ob.Authorize(out account))//检测是否授权成功，并返回绑定的账号（具体是绑定ID还是用户名，你的选择）
                {
                    if (!string.IsNullOrEmpty(account))//已绑定账号，直接用该账号设置登陆。
                    {
                        UserLogin ul = new UserLogin();
                        if (ul.Login(account))
                        {
                            //Response.Redirect("/");
                            return new RedirectResult("/");
                        }
                    }
                    else // 未绑定账号，引导提示用户绑定账号。
                    {
                        //Response.Write(ob.nickName + " 首次使用需要绑定网站账号，请登陆或注册新账号");
                        return new RedirectResult("/login/index");
                    }
                }

            }
            else // 读取授权失败。
            {
                //提示用户重试，或改用其它社区方法登陆。
            }

            return View();
        }

        [HttpPost]
        public string Index(string username, string password)
        {
            var resp = new Response();
            try
            {
                var result = AuthUtil.Login(_appKey, username, password);
                resp.Status = result.Success;
                if (result.Success)
                {
                    resp.Result = "/home/index?Token=" + result.Token;
                }
                else
                {
                    resp.Message = "登陆失败";
                }
            }
            catch (Exception e)
            {
                resp.Status = false;
                resp.Message = e.Message;
            }
            return JsonHelper.Instance.Serialize(resp);
        }

        /// <summary>
        /// 开发者登陆
        /// </summary>
        public ActionResult LoginByDev()
        {
            try
            {
                var result = AuthUtil.Login(_appKey, "System","123456");
                if (result.Success)
                    return Redirect("/home/index?Token=" + result.Token);
                else
                {
                    return RedirectToAction("Index", "Login");

                }

            }
            catch (Exception e)
            {
                return RedirectToAction("Index", "Login");
            }
        }

        public ActionResult Logout()
        {

            AuthUtil.Logout();
            return RedirectToAction("Index", "Login");
        }


        public class UserLogin
        {
            /// <summary>
            /// 授权时直接用用户名登陆。
            /// </summary>
            public bool Login(string userName)
            {
                return true;
            }
            public bool Login(string userName, string password)
            {
                return true;
            }
            public bool Reg(string userName, string password)
            {
                return true;
            }
        }
    }
}